#include "mediator.hpp"
template<typename T>
QuantumWalk::mediator<T>::mediator(QuantumWalk::density_matrix<T>& rho,
				   QuantumWalk::coin<T> c,
				   QuantumWalk::shift<T> S):
  coin_(c.asmatrix()),shift_(S.asmatrix()),rho_(rho.asmatrix()){};

template<typename T>
QuantumWalk::mediator<T>::mediator(const QuantumWalk::mediator<T>& m):
  coin_(m.coin_),shift_(m.shift_),rho_(m.rho_){};

template<typename T> 
void QuantumWalk::mediator<T>::print(){
  std::cout<<"Density matrix"<<std::endl;
  std::cout<<rho_<<std::endl;

  std::cout<<"Shift"<<std::endl;
  std::cout<<shift_<<std::endl;
  
  std::cout<<"Coin"<<std::endl;
  std::cout<<coin_<<std::endl;
  
};

template<typename T>
matrix<T>& QuantumWalk::mediator<T>::rho(){
  return rho_;
}

template<typename T>
const matrix<T>& QuantumWalk::mediator<T>::coin() const {
  return coin_;
}

template<typename T>
const matrix<T>& QuantumWalk::mediator<T>::shift() const {
  return shift_;
}


template class QuantumWalk::mediator<std::complex<double> >;
